<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // //箭头函数的例子
        // function fn1(){
        //     console.log("fn1",this);
        //     return () => {
        //         //由于箭头函数无this，继承上一层作用域this
        //         console.log("fn1箭头函数",this);
        //     }
        // }
        // fn1()();

        // let obj = {money:"一个亿"}
        // function fn2(){
        //     let money = "一块钱"

        //     function fn2_1(){
        //         console.log(this);
        //         console.log(this.money);
        //     }
        //     fn2_1.call(obj);

        //     let fn2_2 = () => {
        //         console.log(this);
        //         console.log(this.money);
        //     }
        //     fn2_2(obj);
        // }
        // fn2()
        // console.log("-----------");
        // //let不会挂在到window作用域下
        // //var会挂在window对象下（全局声明）
        // let num = 666
        // let obj1 = {
        //     num:888,
        //     fn1(){
        //         console.log(this);
        //         console.log(this.num);
        //     },
        //     fn2:() =>{
        //         console.log(this);
        //         console.log(this.num);
        //     }
        // }
        // obj1.fn1()
        // obj1.fn2()
        // console.log("---------------");
        let a = "window";

        let objData = {
            a: "objData"
        }

        let obj = {
            a: "obj",
            fn1: function () {
                console.log(this.a);
            },
            fn2: () => {
                console.log(this.a);
            },
            fn3: function () {
                return function () {
                    console.log(this.a);
                }
            },
            fn4: function () {
                return () => {
                    console.log(this.a);
                }
            }
        };
        obj.fn1(); //"obj"
        obj.fn1.call(objData);//"objData"

        obj.fn2(); //"undefined"
        obj.fn2.call(objData);//"undefined"

        obj.fn3()(); //"undefined"
        obj.fn3().call(objData);//"objData"
        obj.fn3.call(objData)();//"undefined"

        obj.fn4()();//"obj"
        obj.fn4().call(objData); //"obj"
        obj.fn4.call(objData)();//"objData"

    </script>
</body>
</html>